/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cursoexperto.jftf.jsf.pack;

import javax.el.ELContext;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.cursoexperto.jftf.controller.ClienteJpaController;
import org.cursoexperto.jftf.entidades.Cliente;

/**
 *
 * @author Jose Fernando
 */
public class LoginController {

    /** Creates a new instance of LoginController */
    public LoginController() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        jpaController = (ClienteJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "clienteJpa");
    }
    private ClienteJpaController jpaController = null;
    private String usuario = null;
    private String password = null;

    /**
     * Accion para entrar en el sistema, comprueba la existencia de usuario y
     * la comprobación de su password en el caso que el usuario existe
     * almacenando en sesion el valor de logado
     * @return Devuelve la redirección
     */
    public String login() {
        ELContext elContext = FacesContext.getCurrentInstance().getELContext();
        ClienteController c = (ClienteController) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "cliente");
        Cliente cli = jpaController.findByUsuario(usuario);
        if (cli != null) {
            if (getPassword().equals(cli.getPassword())) {
                c.setLogged(true);
                c.setCliente(cli);
            } else {
                FacesContext context = FacesContext.getCurrentInstance();
                /*FacesMessage message = new FacesMessage("Invalid Username and/or Password");
                context.addMessage("loginForm", message);*/
                FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Password incorrecta", "Password incorrecta");
                FacesContext.getCurrentInstance().addMessage("loginForm", facesMsg);
                return "logout";
            }
        } else {
            /*FacesContext context = FacesContext.getCurrentInstance();
            FacesMessage message = new FacesMessage("Invalid Username and/or Password");
            context.addMessage("loginForm", message);*/
            FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, "El usuario no existe", "El usuario no existe");
            FacesContext.getCurrentInstance().addMessage("loginForm", facesMsg);
            return "logout";
        }
        return "login";
    }

    /** Accion para salir del sistema, comprueba si se encuentra logado
     * @return Devuelve la redirección
     */
    public String logout() {
        ELContext elContext = FacesContext.getCurrentInstance().getELContext();
        ClienteController c = (ClienteController) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "cliente");
        if (c.isLogged()) {
            c.setLogged(false);
            c.setCliente(null);
            CarritoController carr = (CarritoController) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "carrito");
            if (carr != null) {
                carr.resetCarrito();
            }
        }
        return "logout";
    }

    /**
     * @return the usuario
     */
    public String getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }
}
